#include <stdio.h>
#include <stdlib.h>
// 因为一次只能上1，2，3中的一个，如果先上一个台阶，那么只需求出剩下n-1台阶的走法
// 所以上n阶台阶问题可以转换为上n-1,n-2,n-3即f(n)=f(n-1)+f(n-2)+f(n-3),递归+动态规划问题
int main(int argc, char *argv[])
{

  int i, n, bi[36] = {0, 1, 2, 4};
  scanf("%d", &n);
  for (i = 4; i <= n; i++) // 数组bi的前四个元素已经被计算出来并初始化了，循环从4开始，表示从第5个元素开始计算
    bi[i] = bi[i - 1] + bi[i - 2] + bi[i - 3];
  printf("%d", bi[n]);
  return 0;
}
// 斐波那契数列的定义是：前两个数是0和1，后续的数是前三个数的和。
// 通过循环计算，数组 bi 中的每个元素都表示斐波那契数列的对应位置的值。